/*
 * Copyright (c) 2011-2021 Technosoftware GmbH. All rights reserved
 * Web: https://technosoftware.com
 *
 * Purpose:
 * Definition of the Ascii class.
 *
 * Based on: POCO C++ Foundation Library
 *           Copyright (c) 2005-2007, Applied Informatics Software Engineering GmbH.
 *           and Contributors.
 *
 * The Software is subject to the Technosoftware GmbH Software License Agreement,
 * which can be found here:
 * https://technosoftware.com/documents/Technosoftware_SLA.pdf
 */

#include "Base/Ascii.h"

namespace Technosoftware
{
    namespace Base
    {
        const int Ascii::CHARACTER_PROPERTIES[128] =
        {
            /* 00 . */ ACP_CONTROL,
            /* 01 . */ ACP_CONTROL,
            /* 02 . */ ACP_CONTROL,
            /* 03 . */ ACP_CONTROL,
            /* 04 . */ ACP_CONTROL,
            /* 05 . */ ACP_CONTROL,
            /* 06 . */ ACP_CONTROL,
            /* 07 . */ ACP_CONTROL,
            /* 08 . */ ACP_CONTROL,
            /* 09 . */ ACP_CONTROL | ACP_SPACE,
            /* 0a . */ ACP_CONTROL | ACP_SPACE,
            /* 0b . */ ACP_CONTROL | ACP_SPACE,
            /* 0c . */ ACP_CONTROL | ACP_SPACE,
            /* 0d . */ ACP_CONTROL | ACP_SPACE,
            /* 0e . */ ACP_CONTROL,
            /* 0f . */ ACP_CONTROL,
            /* 10 . */ ACP_CONTROL,
            /* 11 . */ ACP_CONTROL,
            /* 12 . */ ACP_CONTROL,
            /* 13 . */ ACP_CONTROL,
            /* 14 . */ ACP_CONTROL,
            /* 15 . */ ACP_CONTROL,
            /* 16 . */ ACP_CONTROL,
            /* 17 . */ ACP_CONTROL,
            /* 18 . */ ACP_CONTROL,
            /* 19 . */ ACP_CONTROL,
            /* 1a . */ ACP_CONTROL,
            /* 1b . */ ACP_CONTROL,
            /* 1c . */ ACP_CONTROL,
            /* 1d . */ ACP_CONTROL,
            /* 1e . */ ACP_CONTROL,
            /* 1f . */ ACP_CONTROL,
            /* 20   */ ACP_SPACE | ACP_PRINT,
            /* 21 ! */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 22 " */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 23 # */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 24 $ */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 25 % */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 26 & */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 27 ' */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 28 ( */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 29 ) */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 2a * */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 2b + */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 2c , */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 2d - */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 2e . */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 2f / */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 30 0 */ ACP_DIGIT | ACP_HEXDIGIT | ACP_GRAPH | ACP_PRINT,
            /* 31 1 */ ACP_DIGIT | ACP_HEXDIGIT | ACP_GRAPH | ACP_PRINT,
            /* 32 2 */ ACP_DIGIT | ACP_HEXDIGIT | ACP_GRAPH | ACP_PRINT,
            /* 33 3 */ ACP_DIGIT | ACP_HEXDIGIT | ACP_GRAPH | ACP_PRINT,
            /* 34 4 */ ACP_DIGIT | ACP_HEXDIGIT | ACP_GRAPH | ACP_PRINT,
            /* 35 5 */ ACP_DIGIT | ACP_HEXDIGIT | ACP_GRAPH | ACP_PRINT,
            /* 36 6 */ ACP_DIGIT | ACP_HEXDIGIT | ACP_GRAPH | ACP_PRINT,
            /* 37 7 */ ACP_DIGIT | ACP_HEXDIGIT | ACP_GRAPH | ACP_PRINT,
            /* 38 8 */ ACP_DIGIT | ACP_HEXDIGIT | ACP_GRAPH | ACP_PRINT,
            /* 39 9 */ ACP_DIGIT | ACP_HEXDIGIT | ACP_GRAPH | ACP_PRINT,
            /* 3a : */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 3b ; */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 3c < */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 3d = */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 3e > */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 3f ? */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 40 @ */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 41 A */ ACP_HEXDIGIT | ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 42 B */ ACP_HEXDIGIT | ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 43 C */ ACP_HEXDIGIT | ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 44 D */ ACP_HEXDIGIT | ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 45 E */ ACP_HEXDIGIT | ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 46 F */ ACP_HEXDIGIT | ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 47 G */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 48 H */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 49 I */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 4a J */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 4b K */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 4c L */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 4d M */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 4e N */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 4f O */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 50 P */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 51 Q */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 52 R */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 53 S */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 54 T */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 55 U */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 56 V */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 57 W */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 58 X */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 59 Y */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 5a Z */ ACP_ALPHA | ACP_UPPER | ACP_GRAPH | ACP_PRINT,
            /* 5b [ */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 5c \ */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 5d ] */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 5e ^ */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 5f _ */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 60 ` */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 61 a */ ACP_HEXDIGIT | ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 62 b */ ACP_HEXDIGIT | ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 63 c */ ACP_HEXDIGIT | ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 64 d */ ACP_HEXDIGIT | ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 65 e */ ACP_HEXDIGIT | ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 66 f */ ACP_HEXDIGIT | ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 67 g */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 68 h */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 69 i */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 6a j */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 6b k */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 6c l */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 6d m */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 6e n */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 6f o */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 70 p */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 71 q */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 72 r */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 73 s */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 74 t */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 75 u */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 76 v */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 77 w */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 78 x */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 79 y */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 7a z */ ACP_ALPHA | ACP_LOWER | ACP_GRAPH | ACP_PRINT,
            /* 7b { */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 7c | */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 7d } */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 7e ~ */ ACP_PUNCT | ACP_GRAPH | ACP_PRINT,
            /* 7f . */ ACP_CONTROL
        };

    }
}
